package com.qba.trafficbb.modelo.extractor;

import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.List;

import com.qba.trafficbb.modelo.Juego;
import com.qba.trafficbb.modelo.Senal;
import com.qba.trafficbb.modelo.pregunta.Pregunta;


public class ExtractorPreguntas {
	protected int cantidadOpciones=3;
	   
	   
	   
    public Pregunta extraeNuevaPregunta(Juego j)
    {
        List<Senal> listaSenales=j.getListaSenales();
        List<Senal> listaSEscogida=new ArrayList<Senal>();
        Senal senalCorrecta=null;
        Pregunta result=null;
        
        while(listaSEscogida.size()<cantidadOpciones)
        {
            int pos=Math.round((float)Math.random()* (listaSenales.size()-1));
            Senal senalEscogida=listaSenales.get(pos);
            
            if(!listaSEscogida.contains(senalEscogida))
            {
                listaSEscogida.add(senalEscogida);
            }
        }
        
        int pos=Math.round((float) Math.random() * (cantidadOpciones - 1));
        senalCorrecta=listaSEscogida.get(pos);
        
        result=fabricaPreguntas(j,listaSEscogida.toArray(new Senal[0]),senalCorrecta);
        
        return result;
    }
    
    private Pregunta fabricaPreguntas(Juego j,Object ... paremet)
    {
        Pregunta result=null;
        try{
            Class[] clases=new Class[paremet.length];
            
            for(int i=0;i<clases.length;i++)
            {
                clases[i]=paremet[i].getClass();    
            }
            
            Constructor constructor= j.getClasePregunta().getConstructor(clases);
            result=(Pregunta)constructor.newInstance(paremet);
        }
        catch(Exception ex)
        {
            ex.printStackTrace();    
        }
        return result;
    }
}
